﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
//int main()
//{     //字符串末尾隐藏转义字符-\0,它是字符串结束的标志
//	char arr1[] = { 'a','b','c' };//数组arr1中存放3个字符
//	char arr2[] =  "abcdef";//数组arr2中存放字符串
//	printf("%s\n", arr1);//结果-除了a,b,c三个字符还有一串乱码-需要找到\0才能停止
//	printf("%s\n", arr2);//结果-abcdef,未出现乱码-\0就在f后面
//	return 0;
//}

//int main()
//{
//	char arr1[] = { 'a', 'b', 'c', '\0' };//\0是一个转义字符-一个字符（整体） 
//	char arr2[] = "abc"; 
//	printf("%s\n", arr1);//abc，因为添加了结束标志\0
//	printf("%s\n", arr2); //abc
//	printf("%s\n", "abc\0def");//打印到\0之前的c就停止
//	return 0;
//}

//int main()
//{
//	printf("abcnef\n");//n是一个普通的字符，\让n的意思发生了转变-abcnef
//	printf("abc\nef\n");//\n是一个转义字符，作用是换行-abc,下一行是ef
//	printf("\'\n");// \'用于表示字符常量'
//	printf("\"\n");// \"用于表示字符常量"
//	printf("abc\\n\n");//结果abc\n,\\表示一个反斜杠，防止\n变成转义字符
//	printf("\a");// \a-发出警报或响铃
//	printf("abcde\b\n");// \b-退格键，光标回退⼀个字符，但不删除字符。
//	printf("abcde\bfg");// 若\b在字符串最末尾，打印时不会掩盖前面的那个字符，若在中间，则打印时会掩藏掉前一个字符
//	return 0;
//}

//语句与语句分类-c语言的代码是由一条一条语句构成的
// 
//1.空语句是最简单的，⼀个分号就是⼀条空语句。空语句不做任何事
//int main()
//{
//	;//空语句 return 0;
//}

//2.表达式语句就是在表达式后面加上分号
//int main()
//{
//	int a = 20;
//	int b = 0;
//	b = a + 5; //这里的b=a+5就是一个表达式，意识是把a+5的值赋给b,整个b=a+5;就是一个表达式语句
//	printf("b=%d\n", b);//b是整型，打印用%d，结果:b=25.
//	return 0;
//}

//3.函数调用语句：库函数调用的时候加上分号，就是函数调用语句
//int main()
//{
//	printf("hehe\n");//函数调用语句
//	return 0;
//}

//4.复合语句:复合语句其实就是前⾯讲过的代码块，成对括号中的代码就构成⼀个代码块，也被称为复合语句。
//void print(int arr[], int sz) //函数的大括号中的代码也构成复合语句
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//}
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i < 10; i++) //for循环的循环体的大括号中的就是复合语句 
//	{
//		arr[i] = 10 - i; 
//		printf("%d\n", arr[i]);
//}
//return 0;
//}

//5.控制语句:控制语句用于控制程序的执行流程，以实现程序的各种结构方式
// c语言支持三种结构:顺序结构，选择结构，循环结构，它们由特定的语句定义符组成

//注释:注释是对代码的说明，用于解释代码；不仅是给程序员自己看，也是给别的程序员看的；
// 注释可以反映一个程序员的素质，好的注释会给面试官留下好的印象
//注释的两种形式:第⼀种方式是将注释放在 /*...*/ 之间，内部可以分行
//例如：/* 这是一行注释 */  或者
//    /*   
//   这是一行注释
//    */
// /* 。。。。*/ 的这个注释也不支持嵌套注释， /* 开始注释后，遇到第⼀个 */ 就认为注释结束了。

//第二种注释方式是将注释放在双斜杠 // 后面，从双斜杠到行尾都属于注释。
// 这种注释只能是单行，可以放在行首，也可以放在一行语句的结尾。。
//注:不管是哪⼀种注释，都不能放在双引号里面。
// 双引号里面的注释符号，会成为字符串的⼀部分，解释为普通符号，失去注释作用。
//编译时，注释会被替换成一个空格，所以它不会影响程序的运行

//int main()
//{   //strlen()是一个库函数，包含在头文件<string.h>中，作用是计算\0之前的字符串长度
//	//打印格式为%zd，返回值类型为size_t类型
//	char arr1[] = { 'a','b' };
//	char arr2[] = { 'a','b','\0'};
//	char arr3[] = "ab";
//	printf("%zd\n", strlen(arr1));//随机数
//	printf("%zd\n", strlen(arr2));//2
//	printf("%zd\n", strlen(arr3));//2
//	return 0;
//}

//布尔类型_Bool=bool,取值只有两种:1/0，其中1表示真，0表示假
//布尔类型声明的任何非0变量它的值都会被强制转换为1
//int main()
//{
//	bool flag = -2.01;
//	if (flag)
//	{
//		printf("hehe\n");
//	}
//}

//sizeof()是一个关键字，作用是计算操作符数的类型长度，括号里可以放：类型关键字/表达式/字母
//放类型时不能省略括号，放字母或表达式（不真实参与计算，而是根据表达式类型得出长度大小）可省。
//返回值类型规定为size_t类型，对应的printf（）占位符为%zd

//利用sizeof计算数据类型长度，单位是Byte（字节）
//int main()
//{
//	int a = 10;//定义一个整型变量a赋值10
//	int b = 3;//定义一个整型变量b赋值3
//	printf("%zd\n", sizeof(short));//计算短整型short类型长度-2字节
//	printf("%zd\n", sizeof(int));//计算整型int类型长度-4字节
//	printf("%zd\n", sizeof a);//计算字母a-整型长度，可省括号（）-4字节
//	printf("%zd\n", sizeof(a));
//	printf("%zd\n", sizeof(long));//计算长整型long类型长度-4字节
//	printf("%zd\n", sizeof(long long));//计算更长整型longlong类型长度-8字节
//	printf("%zd\n", sizeof(float));//计算单精度浮点型float类型长度-4字节
//	printf("%zd\n", sizeof(double));//计算双精度浮点型double类型长度-8字节
//	printf("%zd\n", sizeof(long double));//计算更高精度浮点型long double类型长度-8字节
//	printf("%zd\n", sizeof(char));//计算字符型char类型长度-1字节
//	printf("%zd\n", sizeof(_Bool));//计算布尔类型_Bool类型长度-1字节
//	printf("%zd\n", sizeof(bool));//计算布尔类型bool类型长度-1字节
//	printf("%zd\n", sizeof a+b);//计算表达式a+b类型长度-7字节
//	return 0;
//}

//sizeof中表达式不参与不计算，要判断表达的数据类型，得到的是该数据类型的长度。
//int main()
//{
//	short s = 3;//定义一个短整型变量s-2字节，赋值2
//	int b = 12;//定义一个整型变量b-4字节，赋值10
//	printf("%zd\n", sizeof(s = b + 1)); //将b（整型变量）+1（整型）的值赋值给s（短整型），则sizeof得短整型长度-2字节
//	printf("s = %d\n", s); //s并未参与计算，还是原值-3
//	return 0;
//}













